package main

import "fmt"

// 使用值接收者实现接口和使用指针接收者实现接口的区别

type mover interface {
	move()
}

type person struct {
	name string
	age  int8
}

// 使用值接收者实现接口：类型的值和类型的指针都能够保存到接口变量中
func (p person) move() {
	fmt.Printf("%s在跑..\n", p.name)
}

// 使用指针接收者实现接口：类型的指针才能保存到接口变量中
// 无法赋值，因为p1是person类型的值，没有实现mover接口
//func (p *person) move()  {
//	fmt.Printf("%s在跑..\n", p.name)
//}

func main() {
	var m mover
	p1 := person{
		name: "xinKong",
		age:  10,
	}
	// p2是person类型的指针
	p2 := &person{
		name: "danGao",
		age:  15,
	}
	m = p1
	m = p2
	m.move()
}
